package it.univaq.mwt.arssa.presentation.backoffice.ruoli;

import it.univaq.mwt.arssa.business.ArssaBusinessFactory;
import it.univaq.mwt.arssa.business.RuoliService;
import it.univaq.mwt.arssa.business.model.Ruolo;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.MappingDispatchAction;

public class RuoliAction extends MappingDispatchAction {

	public ActionForward adminvisualizzaruoli(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
				
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		RuoliService ruoliService = factory.getRuoliService();			
		
		//setto i dati per far visualizzare la lista dei ruoli
		List<Ruolo> ruoli = ruoliService.cercaRuoli(); // popolo la lista 
		request.setAttribute("ruoli", ruoli);
				
		return mapping.findForward("admin.visualizza.ruoli");

	}
	
	public ActionForward activeadminmodificaruoli(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		RuoliService ruoliService = factory.getRuoliService();
					
		int id = Integer.parseInt(request.getParameter("id"));
		Ruolo ruolo = ruoliService.cercaRuolo(id);
		RuoliForm ruoliForm = (RuoliForm) form;
		BeanUtils.copyProperties(ruoliForm, ruolo); // copio tutti i parametri nella form
				
		request.setAttribute("titoloForm", "Modifica ruolo"); // setto il titolo della form
		request.setAttribute("action", "/admin/ruoli/modificaruoli"); // setto la action
		
		List<Ruolo> ruoli = ruoliService.cercaRuoli(); // popolo la lista dei ruoli
		request.setAttribute("ruoli", ruoli);
		request.setAttribute("id", id);
		
		saveToken(request);
		
		return mapping.findForward("admin.ruoli.form");	
	}
	
	public ActionForward adminmodificaruoli(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		RuoliService ruoliService = factory.getRuoliService();
				
		request.setAttribute("titoloForm", "Modifica ruolo"); // setto il titolo della form per admin.ruoli.result
		request.setAttribute("action", "/admin/ruoli/modificaruoli"); // setto la action		
		
		if (!isTokenValid(request, false)) {
			// setto gli errori
			request.setAttribute("errore", 1); // setto la tipologia di errore/successo
			request.setAttribute("msg", "Errore double submit"); // setto il messaggio
			return mapping.findForward("admin.ruoli.result");
		}
		
		RuoliForm ruoliForm = (RuoliForm) form;
		int id = ruoliForm.getId();
		String nome = ruoliForm.getNome();
		String codice = ruoliForm.getCodice();
		double stipendio = ruoliForm.getStipendio();
				
		Ruolo ruolo = new Ruolo(id, codice, nome, stipendio);
		ruoliService.modificaRuolo(ruolo);
		
		// se arrivo qui,non ho ricevuto errori 
		request.setAttribute("errore", 0); // setto la tipologia di successo
		request.setAttribute("msg", "Modifica avvenuta con successo"); // setto il messaggio
		List<Ruolo> ruoli = ruoliService.cercaRuoli(); // popolo la lista dei ruoli
		request.setAttribute("ruoli", ruoli);
		
		resetToken(request);
		
		return mapping.findForward("admin.ruoli.result");	
	}
	
	public ActionForward activeadmininserisciruolo(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();		
		RuoliService ruoliService = factory.getRuoliService();
		
		request.setAttribute("titoloForm", "Inserisci ruolo"); // setto il titolo della form
		request.setAttribute("action", "/admin/ruoli/inserisciruolo"); // setto la action	
		
		// popolo le select di visualizzazione di tutte le attivita
		request.setAttribute("ruoli", ruoliService.cercaRuoli());	
						
		saveToken(request);
		
		return mapping.findForward("admin.ruoli.form"); 
	}
	
	public ActionForward admininserisciruolo(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		RuoliService ruoliService = factory.getRuoliService();
				
		RuoliForm ruoliForm = (RuoliForm) form;
		int id = ruoliForm.getId();
		String nome = ruoliForm.getNome();
		String codice = ruoliForm.getCodice();
		double stipendio = ruoliForm.getStipendio();
		
		request.setAttribute("titoloForm", "Inserisci ruolo"); // setto il titolo della form
		request.setAttribute("action", "/admin/ruoli/inserisciruolo"); // setto la action	
		
		/* 
		 * Controllo tutti gli errori possibili dovuti all'inserimento (double submit,etc etc)
		 */
		if (!isTokenValid(request, false)) {
			// setto gli errori
			request.setAttribute("errore", 1); // setto la tipologia di errore/successo
			request.setAttribute("msg", "Errore double submit"); // setto il messaggio
			return mapping.findForward("admin.ruoli.result");
		}
		
		if(ruoliService.verificaCodice(codice)){
			request.setAttribute("erroreCodice", 1);
			request.setAttribute("descrizioneCodice", "Codice gi&agrave; presente nel db.");
			List<Ruolo> ruoli = ruoliService.cercaRuoli(); // popolo la lista dei ruoli
			request.setAttribute("ruoli", ruoli);
			request.setAttribute("id", id);
			return mapping.findForward("admin.ruoli.form");	
		}
		
		if(ruoliService.verificaNome(nome)){
			request.setAttribute("erroreNome", 1);
			request.setAttribute("descrizioneNome", "Nome gi&agrave; presente nel db.");
			List<Ruolo> ruoli = ruoliService.cercaRuoli(); // popolo la lista dei ruoli
			request.setAttribute("ruoli", ruoli);
			request.setAttribute("id", id);
			return mapping.findForward("admin.ruoli.form");	
		}
			
		Ruolo ruolo = new Ruolo(id, codice, nome, stipendio);
		ruoliService.inserisciRuolo(ruolo);

		// se arrivo qui,non ho ricevuto errori 
		request.setAttribute("errore", 0); // setto la tipologia di successo
		request.setAttribute("msg", "Inserimento avvenuto con successo"); // setto il messaggio
		List<Ruolo> ruoli = ruoliService.cercaRuoli(); // popolo la lista dei ruoli
		request.setAttribute("ruoli", ruoli);
		
		resetToken(request);
		
		return mapping.findForward("admin.ruoli.result");
	}
	
	
	public ActionForward activeadmineliminaruolo(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		RuoliService ruoliService = factory.getRuoliService();
		
		int id = Integer.parseInt(request.getParameter("id"));
		Ruolo ruolo = ruoliService.cercaRuolo(id);
		
		request.setAttribute("id", id);
		request.setAttribute("ruolo", ruolo);
		request.setAttribute("titoloForm", "Eliminare il seguente ruolo?"); // setto il titolo della form
		request.setAttribute("action", "/admin/ruoli/eliminaruolo"); // setto la action
		
		saveToken(request);
		
		return mapping.findForward("admin.elimina.ruoli.form");
		
	}
	
	public ActionForward admineliminaruolo(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		RuoliService ruoliService = factory.getRuoliService();
	
		request.setAttribute("titoloForm", "Eliminare il seguente ruolo?"); // setto il titolo della form
			
		/* 
		 * Controllo tutti gli errori possibili dovuti all'inserimento (double submit,etc etc)
		 */
		if (!isTokenValid(request, false)) {
			// setto gli errori
			request.setAttribute("errore", 1); // setto la tipologia di errore/successo
			request.setAttribute("msg", "Errore double submit"); // setto il messaggio
			return mapping.findForward("attivita.result");
		}
		
		RuoliForm ruoloForm = (RuoliForm) form;
		int id = ruoloForm.getId();
		ruoliService.eliminaRuolo(id);
		
		// se arrivo qui,non ho ricevuto errori 
		request.setAttribute("errore", 0); // setto la tipologia di successo
		request.setAttribute("msg", "Ruolo eliminato correttamente"); // setto il messaggio
		List<Ruolo> ruoli = ruoliService.cercaRuoli(); // popolo la lista dei ruoli
		request.setAttribute("ruoli", ruoli);
		
		resetToken(request);
		
		return mapping.findForward("admin.ruoli.result");
	
	}
	
	
}
